/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package managedBeans;

import controladores.ConsultarReservaCont;
import controladores.GestionSalaEventosCont;
import controladores.ModificarReservaCont;
import controladores.SolicitarReservaCont;
import modelos.pojos.SalaEventos;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.component.UIViewRoot;
import javax.faces.component.html.HtmlSelectOneMenu;
import javax.faces.context.FacesContext;
import org.apache.log4j.Logger;
import org.primefaces.component.datatable.DataTable;
import org.primefaces.component.inputtext.InputText;

/**
 *
 * @author ricardo
 */
@ManagedBean
@ViewScoped
public class ReservaSala implements Serializable {

    private modelos.pojos.ReservaSala reservaSala;
    private int asistentes;
    private String codigoReservaPadre;
    private DataTable tablaReservas;
    private Map<String, String> listaSalas;
    private boolean noPermitirEdicion = true;
    protected Logger log = Logger.getLogger(ReservaSala.class);

    /** Creates a new instance of ReservaSala */
    public ReservaSala() {
        reservaSala = new modelos.pojos.ReservaSala();
    }

    public modelos.pojos.ReservaSala getReservaSala() {
        return reservaSala;
    }

    public void setReservaSala(modelos.pojos.ReservaSala reservaSala) {
        this.reservaSala = reservaSala;
    }

    public int getAsistentes() {
        return asistentes;
    }

    public void setAsistentes(int asistentes) {
        this.asistentes = asistentes;
    }

    public DataTable getTablaReservas() {
        return tablaReservas;
    }

    public void setTablaReservas(DataTable tablaReservas) {
        this.tablaReservas = tablaReservas;
    }

    public boolean isNoPermitirEdicion() {
        return noPermitirEdicion;
    }

    public void setNoPermitirEdicion(boolean noPermitirEdicion) {
        this.noPermitirEdicion = noPermitirEdicion;
    }

    public Map<String, String> getListaSalas() {
        return listaSalas;
    }

    public void setListaSalas(Map<String, String> listaSalas) {
        this.listaSalas = listaSalas;
    }

    public void desbloquear() {
        this.noPermitirEdicion = false;
        modelos.pojos.ReservaSala seleccion = (modelos.pojos.ReservaSala) tablaReservas.getRowData();
        reservaSala = seleccion;
        listaSalas = new HashMap<String, String>();
        List<SalaEventos> lista = GestionSalaEventosCont.listarSalasDisponiblesPorFecha(reservaSala.getFechaProg());
        for(int i = 0; i<lista.size();i++){
            listaSalas.put(lista.get(i).getNumero(), lista.get(i).getNumero());
        }
    }

    public void crearReservaSala() {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        UIViewRoot root = facesContext.getViewRoot();
        InputText caja = (InputText) root.findComponent("este").findComponent("codReserva");
        codigoReservaPadre = caja.getValue().toString();
        String mensaje = SolicitarReservaCont.validarInformacionReservaSala(reservaSala.getFechaProg());
        if (mensaje == null) {
            List<SalaEventos> disponibles = GestionSalaEventosCont.listarSalasDisponibles(asistentes);
            if (disponibles != null) {
                reservaSala.setSala(disponibles.get(0));
                SolicitarReservaCont.crearReservaSala(reservaSala, codigoReservaPadre);
            }
        } else {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error!", mensaje));
        }
    }

    public void consultarReservaSala() {
        modelos.pojos.ReservaSala seleccion = (modelos.pojos.ReservaSala) tablaReservas.getRowData();
        reservaSala = ConsultarReservaCont.consultarReservaSala(seleccion.getReserva().getCodigoReserva(), seleccion.getSala().getNumero());       
    }

    public List<modelos.pojos.ReservaSala> listarReservasSalas() {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        UIViewRoot root = facesContext.getViewRoot();
        InputText caja = (InputText) root.findComponent("este").findComponent("codReserva");
        codigoReservaPadre = caja.getValue().toString();
        return ConsultarReservaCont.consultarReservasSala(codigoReservaPadre);
    }

    public void cancelarReservaSala() {
        modelos.pojos.ReservaSala seleccion = (modelos.pojos.ReservaSala) tablaReservas.getRowData();
        ModificarReservaCont.cancelarReservaSala(seleccion);
        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(null, new FacesMessage("Reserva Cancelada!"));
    }

    public void actualizarReservaSala() {
        String mensaje = SolicitarReservaCont.validarInformacionReservaSala(reservaSala.getFechaProg());
        if (mensaje == null) {
            FacesContext facesContext = FacesContext.getCurrentInstance();
            UIViewRoot root = facesContext.getViewRoot();
            HtmlSelectOneMenu combo = (HtmlSelectOneMenu) root.findComponent("nosplay").findComponent("comboNu");
            if(combo.getValue()!=null){
                SalaEventos nuevaSala = GestionSalaEventosCont.buscarSalaEventos(combo.getValue().toString());
                reservaSala.setSala(nuevaSala);
            }
            ModificarReservaCont.actualizarReservaSalas(reservaSala);
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage("Reserva Modificada!"));
        } else {
            FacesContext context = FacesContext.getCurrentInstance();
            context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, "Error!", mensaje));
        }
    }
}
